﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLVatTu.Class;
using System.Globalization;
using QLVatTu.InPhieu;

namespace QLVatTu.NghiepVu
{
    public partial class frmQuanLyVatTuHongMat : Form
    {
        KetNoiDB cn = new KetNoiDB();

        public frmQuanLyVatTuHongMat()
        {
            InitializeComponent();
        }

        private void load_dtgPhieuBaoHongMat(string dieuKien = null)
        {
            string sql = "";
            if (dieuKien != null)
            {
                sql = @"
                    SELECT     row_number() over(order by tbl_PhieuBaoHongMat.MaPhieu) as STT,dbo.tbl_PhieuBaoHongMat.MaPhieu, dbo.tbl_Kho.TenKho, dbo.tbl_PhieuBaoHongMat.NguoiLapPhieu, dbo.tbl_PhieuBaoHongMat.NgayLapPhieu, 
                      dbo.tbl_PhieuBaoHongMat.XacNhan
                    FROM         dbo.tbl_PhieuBaoHongMat INNER JOIN
                                          dbo.tbl_Kho ON dbo.tbl_PhieuBaoHongMat.MaKho = dbo.tbl_Kho.MaKho
                    "
                    + dieuKien;
            }
            else
            {
                sql = @"
                    SELECT     row_number() over(order by tbl_PhieuBaoHongMat.MaPhieu) as STT,dbo.tbl_PhieuBaoHongMat.MaPhieu, dbo.tbl_Kho.TenKho, dbo.tbl_PhieuBaoHongMat.NguoiLapPhieu, dbo.tbl_PhieuBaoHongMat.NgayLapPhieu, 
                      dbo.tbl_PhieuBaoHongMat.XacNhan
                    FROM         dbo.tbl_PhieuBaoHongMat INNER JOIN
                                          dbo.tbl_Kho ON dbo.tbl_PhieuBaoHongMat.MaKho = dbo.tbl_Kho.MaKho
                ";
            }
            dtgPhieuBaoHongMat.Rows.Clear();
            DataTable tbl = cn.getTable(sql);
            if (tbl.Rows.Count > 0)
            {
                foreach (DataRow dr in tbl.Rows)
                {
                    DataGridViewRow dgvr = (DataGridViewRow)dtgPhieuBaoHongMat.Rows[0].Clone();
                    dgvr.Cells[0].Value = dr["STT"].ToString();
                    dgvr.Cells[1].Value = dr["MaPhieu"].ToString();
                    dgvr.Cells[2].Value = dr["TenKho"].ToString();
                    dgvr.Cells[3].Value = dr["NguoiLapPhieu"].ToString();
                    dgvr.Cells[4].Value = DateTime.Parse(dr["NgayLapPhieu"].ToString());
                    string _XacNhan = "Chưa xác nhận";
                    if (dr["XacNhan"] != null && bool.Parse(dr["XacNhan"].ToString()) == true) _XacNhan = "Đã xác nhận";
                    dgvr.Cells[5].Value = _XacNhan;
                    dtgPhieuBaoHongMat.Rows.Add(dgvr);
                }
            }
        }

        private void loadData()
        {
            cbbKho.DataSource = cn.getTable("SELECT [MaKho],[TenKho] FROM [tbl_Kho]");
            cbbKho.DisplayMember = "TenKho";
            cbbKho.ValueMember = "MaKho";

            cbbXacNhan.SelectedIndex = 0;

            load_dtgPhieuBaoHongMat();
        }

        private void frmQuanLyVatTuHongMat_Load(object sender, EventArgs e)
        {
            if (cn.KetNoi())
            {
                loadData();
            }
            else
            {
                MessageBox.Show("Kết nối CSDL thất bại!");
                this.Close();
            }
        }

        private string XacDinhDieuKienLoc()
        {
            string dieuKienLoc = "where 1=1 ";

            if (ckbMaPhieu.Checked && txtMaPhieu.Text.Trim() != "")
            {
                dieuKienLoc += " and tbl_PhieuBaoHongMat.MaPhieu like '%" + txtMaPhieu.Text.Trim() + "%'";
            }

            if (ckbKho.Checked == true && cbbKho.Items.Count > 0)
            {
                dieuKienLoc += " and tbl_PhieuBaoHongMat.MaKho='" + cbbKho.SelectedValue.ToString() + "'";
            }

            if (ckbNguoiLap.Checked == true && txtNguoiLap.Text.Trim() != "")
            {
                dieuKienLoc += " and tbl_PhieuBaoHongMat.NguoiLapPhieu like '%" + txtNguoiLap.Text.Trim() + "%'";
            }

            if (ckbNgayLap.Checked == true)
            {
                dieuKienLoc += " and tbl_PhieuBaoHongMat.NgayLapPhieu between '" + dtipTuNgay.Value.ToString("yyyy-MM-dd") + "' and '" + dtipDenNgay.Value.ToString("yyyy-MM-dd") + "'";
            }

            if (ckbXacNhan.Checked == true)
            {
                if (cbbXacNhan.Text == "Đã xác nhận")
                {
                    dieuKienLoc += " and tbl_PhieuBaoHongMat.XacNhan = 1";
                }
                else if (cbbXacNhan.Text == "Chưa xác nhận")
                {
                    dieuKienLoc += " and tbl_PhieuBaoHongMat.XacNhan = 0";
                }
            }

            return dieuKienLoc;
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            load_dtgPhieuBaoHongMat(XacDinhDieuKienLoc());
        }

        private void ckbMaPhieu_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbMaPhieu.Checked == true)
            {
                txtMaPhieu.Text = "";
            }
            else
            {
                txtMaPhieu.Text = "Tìm theo mã phiếu";
            }
            txtMaPhieu.Enabled = ckbMaPhieu.Checked;
        }

        private void ckbKho_CheckedChanged(object sender, EventArgs e)
        {
            cbbKho.Enabled = ckbKho.Checked;
        }

        private void ckbNguoiLap_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbNguoiLap.Checked == true)
            {
                txtNguoiLap.Text = "";
            }
            else
            {
                txtNguoiLap.Text = "Tìm theo người lập phiếu";
            }
            txtNguoiLap.Enabled = ckbNguoiLap.Checked;
        }

        private void ckbNgayLap_CheckedChanged(object sender, EventArgs e)
        {
            dtipTuNgay.Enabled = dtipDenNgay.Enabled = ckbNgayLap.Checked;
        }

        private void ckbXacNhan_CheckedChanged(object sender, EventArgs e)
        {
            cbbXacNhan.Enabled = ckbXacNhan.Checked;
        }

        private void dtgPhieuBaoHongMat_SelectionChanged(object sender, EventArgs e)
        {
            if (dtgPhieuBaoHongMat.SelectedRows.Count > 0 && dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value != null)
            {
                string sql = @"
                    SELECT    row_number() over(order by dbo.tbl_ChiTietPhieuBaoHongMat.MaPhieuChiTiet) as STTVT, tbl_ChiTietPhieuBaoHongMat.MaVatTu, dbo.tbl_VatTu.TenVatTu as TenVatTu, dbo.tbl_DonViTinh.TenDonViTinh as DonViTinh, dbo.tbl_ChiTietPhieuBaoHongMat.SoLuongTon, dbo.tbl_ChiTietPhieuBaoHongMat.SoLuongMat, 
                      dbo.tbl_ChiTietPhieuBaoHongMat.SoLuongHong
                    FROM         dbo.tbl_ChiTietPhieuBaoHongMat INNER JOIN
                      dbo.tbl_VatTu ON dbo.tbl_ChiTietPhieuBaoHongMat.MaVatTu = dbo.tbl_VatTu.MaVatTu INNER JOIN
                      dbo.tbl_DonViTinh ON dbo.tbl_ChiTietPhieuBaoHongMat.MaDonViTinh = dbo.tbl_DonViTinh.MaDonViTinh
                    WHERE dbo.tbl_ChiTietPhieuBaoHongMat.MaPhieu = '" + dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString() + "'";
                dtgChiTietVatTu.DataSource = cn.getTable(sql);

                sql = "SELECT [XacNhan] FROM [tbl_PhieuBaoHongMat] WHERE [MaPhieu] = '" + dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString() + "'";
                bool _XacNhan = bool.Parse(cn.LayDuLieu(sql));
                btnXacNhan.Enabled = !_XacNhan;
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            frmPhieuVatTuHongMat frm = new frmPhieuVatTuHongMat();
            frm.ShowDialog();
            load_dtgPhieuBaoHongMat();
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (dtgPhieuBaoHongMat.SelectedRows.Count > 0 && dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value != null)
            {
                string sql = "SELECT [XacNhan] FROM [tbl_PhieuBaoHongMat] WHERE [MaPhieu] = '" + dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString() + "'";
                bool _XacNhan = bool.Parse(cn.LayDuLieu(sql));
                if (_XacNhan == true)
                {
                    MessageBox.Show("Bạn không thể sửa phiếu đã xác nhận", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                frmPhieuVatTuHongMat frm = new frmPhieuVatTuHongMat();
                frm.MaPhieuCapNhat = dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString();
                frm.ShowDialog();
                load_dtgPhieuBaoHongMat();
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (dtgPhieuBaoHongMat.SelectedRows.Count > 0 && dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value != null)
            {
                string sql = "SELECT [XacNhan] FROM [tbl_PhieuBaoHongMat] WHERE [MaPhieu] = '" + dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString() + "'";
                bool _XacNhan = bool.Parse(cn.LayDuLieu(sql));
                if (_XacNhan == true)
                {
                    MessageBox.Show("Bạn không thể xóa phiếu đã xác nhận.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else
                {
                    DialogResult msg = MessageBox.Show("Bạn chắc chắn muốn xóa?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (msg == DialogResult.Yes)
                    {

                        cn.Delete_Table("tbl_ChiTietPhieuBaoHongMat", "MaPhieu='" + dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString() + "'");
                        cn.Delete_Table("tbl_PhieuBaoHongMat", "MaPhieu='" + dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString() + "'");
                        MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Xóa phiếu báo hỏng vật tư.");
                    }
                }
                load_dtgPhieuBaoHongMat();
            }
        }

        private void btnIn_Click(object sender, EventArgs e)
        {
            frmInPhieuHongMat frm = new frmInPhieuHongMat();
            if (dtgPhieuBaoHongMat.SelectedRows.Count > 0 && dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value != null)
            {
                string SoPhieu = dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString();
                List<PhieuHongMat> list = new List<PhieuHongMat>();

                string Ngay = "";
                string Thang = "";
                string Nam = "";
                string NguoiLapPhieu = "";
                string TenKho = "";

                string sql = "";
                DataTable dt = new DataTable();

                sql = @"
                 SELECT     dbo.tbl_PhieuBaoHongMat.MaPhieu, dbo.tbl_PhieuBaoHongMat.MaKho, dbo.tbl_Kho.TenKho, dbo.tbl_PhieuBaoHongMat.NguoiLapPhieu, 
                                      dbo.tbl_PhieuBaoHongMat.NgayLapPhieu
                FROM         dbo.tbl_PhieuBaoHongMat INNER JOIN
                                      dbo.tbl_Kho ON dbo.tbl_PhieuBaoHongMat.MaKho = dbo.tbl_Kho.MaKho
                WHERE     dbo.tbl_PhieuBaoHongMat.MaPhieu = '" + SoPhieu + "'";
                dt = cn.getTable(sql);
                if (dt.Rows.Count > 0)
                {
                    string NgayLap = dt.Rows[0]["NgayLapPhieu"].ToString();
                    DateTime dtNgayLap = DateTime.Parse(NgayLap);
                    Ngay = dtNgayLap.Day.ToString();
                    Thang = dtNgayLap.Month.ToString();
                    Nam = dtNgayLap.Year.ToString();
                    NguoiLapPhieu = dt.Rows[0]["NguoiLapPhieu"].ToString();
                    TenKho = dt.Rows[0]["TenKho"].ToString();
                }

                sql = @"
                        SELECT     dbo.tbl_ChiTietPhieuBaoHongMat.MaVatTu, dbo.tbl_VatTu.TenVatTu, dbo.tbl_DonViTinh.TenDonViTinh, dbo.tbl_ChiTietPhieuBaoHongMat.SoLuongTon, 
                                              dbo.tbl_ChiTietPhieuBaoHongMat.SoLuongMat, dbo.tbl_ChiTietPhieuBaoHongMat.SoLuongHong
                        FROM         dbo.tbl_ChiTietPhieuBaoHongMat INNER JOIN
                                              dbo.tbl_VatTu ON dbo.tbl_ChiTietPhieuBaoHongMat.MaVatTu = dbo.tbl_VatTu.MaVatTu INNER JOIN
                                              dbo.tbl_DonViTinh ON dbo.tbl_ChiTietPhieuBaoHongMat.MaDonViTinh = dbo.tbl_DonViTinh.MaDonViTinh
                        WHERE     dbo.tbl_ChiTietPhieuBaoHongMat.MaPhieu = '" + SoPhieu + "'";
                dt = cn.getTable(sql);
                int stt = 0;
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        stt++;
                        PhieuHongMat phieu = new PhieuHongMat();
                        phieu.SoPhieu = SoPhieu;
                        phieu.Ngay = Ngay;
                        phieu.Thang = Thang;
                        phieu.Nam = Nam;
                        phieu.NguoiLapPhieu = NguoiLapPhieu;
                        phieu.TenKho = TenKho;

                        phieu.STT = stt.ToString();
                        phieu.MaVT = dr["MaVatTu"].ToString();
                        phieu.TenVatTu = dr["TenVatTu"].ToString();
                        phieu.DVT = dr["TenDonViTinh"].ToString();
                        phieu.SL = dr["SoLuongTon"].ToString();
                        phieu.SoLuongHong = dr["SoLuongHong"].ToString();
                        phieu.SoLuongMat = dr["SoLuongMat"].ToString();
                        list.Add(phieu);
                    }
                }
                frm.PhieuHongMatBindingSource.DataSource = list;
                frm.ShowDialog();
            }
        }

        private void btnXacNhan_Click(object sender, EventArgs e)
        {
            if (dtgPhieuBaoHongMat.SelectedRows.Count > 0 && dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value != null)
            {
                foreach (DataGridViewRow dgvr in dtgChiTietVatTu.Rows)
                {
                    if (dgvr.IsNewRow) continue;
                    string sql = "SELECT MaKho FROM dbo.tbl_PhieuBaoHongMat WHERE MaPhieu = '" + dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString() + "'";
                    string MaKho = cn.LayDuLieu(sql);
                    string MaVatTu = dgvr.Cells["MaVatTu"].Value.ToString();
                    string MaPhieu = dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString();
                    string NgayLapPhieu = dtgPhieuBaoHongMat.CurrentRow.Cells["NgayLapPhieu"].Value.ToString();

                    string strSoLuongMat;
                    float SoLuongMat = 0;
                    string strSoLuongHong;
                    float SoLuongHong = 0;

                    if (dgvr.Cells["SoLuongMat"].Value.ToString().Contains(','))
                    {
                        strSoLuongMat = dgvr.Cells["SoLuongMat"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongMat = dgvr.Cells["SoLuongMat"].Value.ToString();
                    }
                    float.TryParse(strSoLuongMat, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongMat);

                    if (dgvr.Cells["SoLuongHong"].Value.ToString().Contains(','))
                    {
                        strSoLuongHong = dgvr.Cells["SoLuongHong"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongHong = dgvr.Cells["SoLuongHong"].Value.ToString();
                    }
                    float.TryParse(strSoLuongHong, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongHong);

                    sql = "select sum(SoLuong) as SoLuongTonKho from tbl_LuuKho where MaKho='" + MaKho + "' and MaVatTu='" + MaVatTu + "'";
                    string strSoLuong = cn.LayDuLieu(sql);
                    float SoLuong = 0;
                    if (strSoLuong != null && strSoLuong != "" && float.Parse(strSoLuong) >= 0) SoLuong = float.Parse(strSoLuong);
                    double SoLuongHongMat = -Math.Round((SoLuongHong + SoLuongMat),2);

                    if (SoLuong < Math.Round((SoLuongHong + SoLuongMat),2))
                    {
                        MessageBox.Show("Không thể xác nhận phiếu.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    else
                    {
                        DialogResult msg = MessageBox.Show("Sau khi xác nhận bạn không thể sửa và xóa phiếu!", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (msg == DialogResult.Yes)
                        {
                            cn.Update_Table("tbl_PhieuBaoHongMat", "XacNhan=1", "MaPhieu='" + dtgPhieuBaoHongMat.CurrentRow.Cells["MaPhieu"].Value.ToString() + "'");
                            cn.Insert_Table("tbl_LuuKho", "[SoPhieu],[MaKho],[MaVatTu],[SoLuong],[SoLuongPhePham],[NgayCapNhat]", "'" + MaPhieu + "','" + MaKho + "','" + MaVatTu + "','" + SoLuongHongMat.ToString().Replace(",", ".") + "','" + SoLuongHong.ToString().Replace(",", ".") + "','" + NgayLapPhieu + "'");
                        }
                    }
                }
                load_dtgPhieuBaoHongMat();
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            if (this.TopLevel == false) this.Parent.Parent.Controls.Remove(this.Parent);
            else this.Close();
        }

    }
}
